﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    long long x = 0;
    cin >> x;

    string str = to_string(x);
    long long sum = 0;
    for (int i = 0; i < str.size(); ++i)
    {
        sum += str[i] - '0';
    }

    long long num = sum / 2;;
    if (sum % 2 == 1)//不能被分成两半
    {
        cout << "No" << endl;
        return 0;
    }

    //动态表示：dp[i][j]表示在前i个物品中，选择总和为j的方案是否存在
    //动态转移方程：dp[i][j] = dp[i-1][j] || dp[i-1][j-(str[i-1]-'0')]
    //初始化：dp[i][0] = 1 总和为0，不管物品多少个，方案都存在，为不选择
    //填表顺序：从左往右，从上到下
    //返回值：dp[str.size()][num]

    vector<vector<int>> dp(str.size() + 1, vector<int>(num + 1, 0));
    for (int i = 0; i < str.size() + 1; ++i)
    {
        dp[i][0] = 1;
    }

    for (int i = 1; i < str.size() + 1; ++i)
    {
        for (int j = 1; j < num + 1; ++j)
        {
            dp[i][j] = dp[i - 1][j];
            if (j >= str[i - 1] - '0')
            {
                dp[i][j] = dp[i][j] || dp[i - 1][j - (str[i - 1] - '0')];
            }
        }
    }

    if (dp[str.size()][num])
    {
        cout << "Yes" << endl;
    }
    else
    {
        cout << "No" << endl;
    }

    return 0;
}

/*
描述
小红拿到了一个正整x。她可以将其中一些数位染成红色。
然后她想让所有染红的数位数字之和等于没染色的数位数字之和。
她不知道能不能达成目标。你能告诉她吗？

输入描述：
一个正整数x，1≤x≤10^18
输出描述：
如果小红能按要求完成染色，输出"Yes"。否则输出"No"。

示例1
输入：
1234567
输出：
Yes
说明：
将3、4、7染成红色即可，这样3+4+7=1+2+5+6
*/

